/*
 * Tradutores - Tarefa 2 - Calculadora
 * Alex Oliveira   - 06/30403
 * Danilo Trindade - 06/82039
 */

%{
    #include <stdio.h>
    int yylex (void);
    void yyerror (char const *);

    /* Tabela de símbolos. */
    int tab[26];
%}

%token ID
%token NUM
%right '='      // operador de associatividade à direita
%left '-' '+'   // operador de associatividade à esquerda
%left '*' '/'   // operador de associatividade à esquerda
%left MENOS     // criando um operador de maior precedência de todos


%%

input:        /* vazio */
            | input cmd
;

cmd:          '\n'
            | exp '\n'              { printf("%d\n", $1); }
            | atr '\n'              { printf("%d\n", $1); }
;

atr:          ID '=' exp            { $$ = tab[$1 - 'A'] = $3; }

exp:          ID                    { $$ = tab[$1 - 'A']; }
            | NUM                   { $$ = $1; }
            | exp '+' exp           { $$ = $1 + $3; }
            | exp '-' exp           { $$ = $1 - $3; }
            | exp '*' exp           { $$ = $1 * $3; }
            | exp '/' exp           { $$ = $1 / $3; }
            | '-' exp %prec MENOS   { $$ = -$2; }
            | '(' exp ')'           { $$ = $2; }
;

%%

/* Diz ao Bison o que fazer quando ocorrer um erro. */
void yyerror(char const *s) {
}
